#include <iostream>
#include <algorithm>
using namespace std;
using ll=long long;

const int N=2*1e5+10;

struct node{
	int l,r;
	int v;
}tr[4*N];
int n,m,p,last;
void pushup(int u)
{
	tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}
void build(int u,int l,int r)
{
	tr[u]={l,r};
	if(l==r)
		return;
	int mid=l+r>>1;
	build(u<<1,l,mid);
	build(u<<1|1,mid+1,r);
}
int query(int u,int l,int r)
{
	if(tr[u].l>=l && tr[u].r<=r)
		return tr[u].v;
	
	int mid=tr[u].l+tr[u].r>>1;
	int v=0;
	if(l<=mid)
		v=query(u<<1,l,r);
	if(r>mid)
		v=max(v,query(u<<1|1,l,r));
	return v;	
}
void modify(int u,int x,int v)
{
	if(tr[u].l==x && tr[u].r==x)
		tr[u].v=v;
	else{
		int mid=tr[u].l+tr[u].r>>1;
		if(x<=mid)
			modify(u<<1,x,v);
		else
			modify(u<<1|1,x,v);
		pushup(u);
	}
}
int main()
{
	n=0,last=0;
	cin>>m>>p;
	build(1,1,m);
	char op[2];
	int x;
	for(int i=0;i<m;i++)
	{
		scanf("%s%d",op,&x);
		if(*op=='A')
		{
			modify(1,n+1,((ll)x+last)%p);
			n++;
		}
		else{
			last=query(1,n-x+1,n);
			cout<<last<<endl;
		}
	}
	return 0;
}
